#include "head.h"
#include "login.h"
#define NUM 100     //定义进度条为100%加载
//定义一个结构体成员，用于从键盘接受用户输入的账号和密码信息
user my;
int flag = 0;           //flag标记用户名输入正确,正确为1
int num1, num2 = 0;     // num1记录用户名输入错误次数,num记录密码输入错误次数
                        // 创建一个用户信息结构体数组

// 定义用户登录函数
void login(user* struct_arr, int lenth)
{
    while (1)
    {  
        int i;
        //输入函数不能写在for循环里面,不然每次比较都要输入!
        printf("请输入你的用户名:");
        scanf("%s", my.user_name);

        //循环遍历判断用户输入的用户名是否和系统存储的相等
        for ( i = 0; i < lenth; i++)
        {

            if (!strcmp(my.user_name, struct_arr[i].user_name))//使用strcmp函数比对用户名
            {
                printf("用户名正确!\n");
                flag = 1;//用户名输入正确为1
                break;
            }
            else if (i==lenth-1)//如果遍历完数组还没有匹配到对应的用户名则说明输入的用户名有误
            {
                printf("用户名错误,请重新输入!\n");
                num1++;
            }
        }

        //判断密码是否正确
        while (flag)
        {
            printf("请输入你的密码:");
            scanf("%s", my.user_password);
            if (!strcmp(my.user_password, struct_arr[i].user_password)) // 使用strcmp函数比对用户密码
            {
                menu();
                return;
            }
            else
            {
                printf("密码错误,请重新输入:\n");
                num2++;
            }
            juge_in_times(&num1,&num2);
        }
        juge_in_times(&num1,&num2);  //判断输入次数是否超过三次,超过则需等待三秒
    }
}


//定义进度条函数
void progress_bar(int seconds)
{
    system("clear");                             // 清除屏幕
    char buffer[NUM + 1] = {0};                  // 存储进度条字符
    char arr[5] = {"-/|\\"};                     // 存储基本的变化字符
    int usleep_time = (seconds * 1000000) / NUM; // 计算每次循环等待的微秒数

    for (int i = 0; i <= NUM; ++i)
    {
        // 更新进度条
        for (int j = 0; j < i; ++j)
        {
            buffer[j] = '>';
        }
        buffer[i] = '\0'; // 确保字符串正确结束

        // 打印进度条
        printf("[%-100s][%d%%][%c]\r", buffer, (i * 100) / NUM, arr[i % 4]);
        fflush(stdout); // 确保立即输出

        // 等待指定的微秒数
        usleep(usleep_time);
    }
    printf("\n"); // 进度条完成后换行
}

//定义判断用户输入错误函数
//用指针传递num1和num2的值才会修改
void juge_in_times(int *num1,int *num2)
{
    //判断输入次数是否超过三次,超过则需等待三秒
    if ((*num1+*num2)==3)
    {
        *num1 = 0;     //重新清0,方便下次判断
        *num2 = 0;
        puts("用户名和密码累计输错3次!请3秒后重新输入!");
        sleep(1.5);
        progress_bar(3);
    }
}



